package controllers; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Iterator; import java.util.TreeSet; import javax.swing.JOptionPane; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import comparators.ProductComparator; import model.Customer; import model.OPDept; import model.Order; import model.OrderedProduct; import model.Warehouse; import utilities.OrderStatus; import view.UserView; import model.Product; public class UserController { private UserView uw; private Warehouse warehouse; private Order order; private Customer customer; private OPDept opdept; private SerializationController sc; static int indexIdOrders; public UserController(UserView uw, Customer customer, SerializationController sc) { this.uw = uw; this.customer = customer; this.sc = sc; this.order = new Order(0, this.customer.getIdCustomer()); setOrder(); this.warehouse = sc.deserializeWarehouse(); this.opdept = sc.deserializeOrders(); this.uw.addSearchButtonActionListener(new SearchListener()); this.uw.addToListActionListener(new AddToListActionListener()); this.uw.paintTable(warehouse.getProducts()); this.uw.addEmptyListActionListener(new EmptyListActionListener()); this.uw.addBuyActionListener(new BuyActionListener()); this.uw.orderHistoryActionListener(new HistoryActionListener()); } class HistoryActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { uw.getPanelOrders().setVisible(true); opdept = sc.deserializeOrders(); Iterator<Order> itr = opdept.getOrders().iterator(); while (itr.hasNext()) { Order o = itr.next(); uw.getListDataO().addElement(o.getId()); uw.getListDataO().addElement("Status: " + o.getStatus() ); uw.getListDataO().addElement("Total value: " + o.getValue()); Iterator<OrderedProduct> itrop = o.getOrderedProducts().iterator(); while (itrop.hasNext()) { OrderedProduct op = itrop.next(); uw.getListDataO() .addElement(op.getProduct().getTitle() + "-> Ordered quantity: " + op.getOrderedQuantity()); } uw.getListDataO().addElement(" "); uw.getOrderList().setListData(uw.getListDataO()); } } } class SearchListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { String search = uw.getSearchText(); if (!search.isEmpty()) { TreeSet<Product> searchResults = warehouse.searchWarehouse(search); if (searchResults.isEmpty()) JOptionPane.showMessageDialog(null, "Item not found!"); else uw.paintTable(searchResults); } else { uw.paintTable(sc.deserializeWarehouse().getProducts()); } } } public void setOrder() { opdept = sc.deserializeOrders(); this.order = new Order(opdept.getNextOrderId(), this.customer.getIdCustomer()); sc.serializeOrders(opdept); } class EmptyListActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { uw.getListData().removeAllElements(); uw.getShoppingList().repaint(); } } class BuyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { opdept = sc.deserializeOrders(); opdept.addOrders(order); opdept.processOrders(); sc.serializeOrders(opdept); sc.serializeWarehouse(warehouse); uw.getListData().removeAllElements(); uw.getShoppingList().repaint(); warehouse = sc.deserializeWarehouse(); if (uw.getSearchText().isEmpty()) uw.paintTable(warehouse.getProducts()); else uw.paintTable(warehouse.searchWarehouse(uw.getSearchText())); indexIdOrders++; setOrder(); // prepare next order } } class AddToListActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (uw.getTable().getSelectedRow() != -1) { int idToAdded = (int) (uw.getModel().getValueAt(uw.getTable().getSelectedRow(), 0)); System.out.println("ORDERED: " + idToAdded); int qtyToAdded = Integer .parseInt(JOptionPane.showInputDialog("Introduce the quantity you want to buy!")); System.out.println("QtytoBEadded: " + qtyToAdded); warehouse = sc.deserializeWarehouse(); if (qtyToAdded > warehouse.getProduct(idToAdded).getQuantity()) { JOptionPane.showMessageDialog(null, "UNDERSTOCK!"); } else { OrderedProduct op = new OrderedProduct(warehouse.getProduct(idToAdded), qtyToAdded); order.addOrderedProduct(op); uw.getListData().addElement(op.getProduct().getTitle() + " | " + op.getOrderedQuantity()); uw.getShoppingList().setListData(uw.getListData()); sc.serializeWarehouse(warehouse); } } } } }